

\documentclass[a4paper]{article}	

\usepackage[brazilian]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{subfig}
\usepackage{graphicx}

\begin{document}
						 
%Primeira página, com o título
\begin{titlepage}
        \vfill
	\begin{flushleft}
                Universidade de Brasília ‚ UnB\\
                Instituto de Ciências Exatas ‚ IE\\
                Departamento de Ciência da Computação ‚ CIC\\
                Transmissão de Dados ‚ Turma A\\
	\end{flushleft}	
	\begin{center}
		\vspace*{5.0cm}	
		\rule{\linewidth}{0.5mm} \\[0.4cm]
			{ \huge \bfseries Trabalho 03 - Implementação do Go Back N}\\[0.1cm]
		\rule{\linewidth}{0.5mm} \\[0.4cm]	
	\end{center}
	\vfill
		\begin{flushleft}
			Igor Coelho - 06/\\
			Thiago Melo Stuckert do Amaral - 06/96773 
		\end{flushleft}	
	\begin{center}
                Brasilia, 29 de março de 2009}\\	
	\end{center}	
\end{titlepage}
\tableofcontents

DAR IMPORTANCIA PARA O RELATÓRIO!!!!
\\A pasta bin conterá os executáveis.
\\A pasta doc a documentação.
\\A pasta trabalhos_relacionados contém o exemplo de simulação do kurose e um trabalho de um cara da unicamp que eu n entendi bem o que era, mas me parece que é a \\simulação do kurose feita cum uma biblioteca cnet ( http://www.csse.uwa.edu.au/cnet/introduction.html ) .

\section{Introdução teórica}

\section{Objetivos}

Primeiro tentei responder as perguntas sem implementar o go back n..
\\

	Assuma um transmissor e  receptor com buffers de B bits.  Assuma que o objeto a ser transmitido  seja de O bits e que o canal  tenha capacidade de R bits e RTT de t \\ms. Assuma que erros podem ocorrer a uma taxa de 1, 5, 10, 20, 40, 80\%. Com base nestes parâmetros você deverá implementar o mecanismo go back N que permita 
\\simular uma transmissão de dados entre dois hospedeiros. Após a implementação, você deverá responder as seguintes perguntas: 
\\
1) Qual a melhor forma de se calcular o tempo de timeout para os eventos? Qual o efeito do 
tamanho da janela (se a janela for muito grande ou muito pequena)? Mostre isso num gráfico 
e explique.
\\\\
1) Qual a melhor forma de se calcular o tempo de timeout para os eventos?
\\\\
O tempo de timeout deve ser calculado em cima dos SampleRTTs.
\\TimeoutInterval = EstimatedRTT + 4 * DevRTT
\\
EstimatedRTT = (1-alfa) * EstimatedRTT + alfa * SampleRTT
\\O primeiro Estimated RTT acredito que será igual ao SampleRTT
\\alfa tem valor tipico de 0.125 .
\\
DevRTT = (1- beta) * DevRTT + beta * | SampleRTT - EstimatedRTT |
\\ O primeiro DevRTT deve ser igual a 0
\\beta tem valor tipico 0.25 . 
 \\
 Qual o efeito do tamanho da janela (se a janela for muito grande ou muito pequena)?
\\
 Uma janela muito pequena limitaria a quantidade de pacotes que eu conseguiria enviar sem receber o ack.
 \\
No caso de ocorrer uma perca de um pacote entre os primeiros de uma janela muito grande faria com que eu tivesse que reenviar vários pacotes.
\\
Basta fazer um gráfico variando o tamanho da janela.
\\
2) Em quais cenários é possível obter a maior vazão? Assumindo uma taxa de erros de 1\%. Qual 
\\a melhor relação entre as diversas variáveis acima para obter esse resultado? Mostre num 
\\gráfico e explique.
 \\
 Em quais cenários é possível obter a maior vazão?
  \\
  Lógicamente quando tivermos uma taxa de erro baixa.
  \\Um buffer grande.
  \\O tamanho do pacote grande? talvez porém quando ocorrem perdas desse pacote grande perderemos bastante dados.
  \\Capacidade do canal Alta!
 \\ O tamanho da janela grande? talvez quando a taxa de perda é baixa.
 \\ 
  Qual a melhor relação entre as diversas variáveis acima para obter esse resultado? 
 \\Simulando, com a situação descrita acima.
 \\
3) Conforme aumenta a probabilidade de erro, como fica a utilização do canal? Dos buffers? 
\\Qual a taxa de goodput (ou seja, a taxa de dados efetivamente transmitida no canal). Mostre 
\\isso num gráfico e explique.
\\Com o aumento da taxa de erro a utilização do canal deve aumentar, pois vou ter que enviar mais coisas pelo mesmo canal para que a transmissão do dado seja efetuada.
\\A utilização do buffer deve aumentar? nao sei 
\\A taxa de goodput deve diminuir pois estarei transmitindo mais lixo.
\\
 
O seu programa deverá ser implementado sob uma conexão UDP. Todas as premissas acima assumem 
\\uma conexão UDP mas os mecanismos estarão sendo implementados pela sua aplicação (motivos 
\\óbvios). 


\section{Procedimentos}
	
\section{Dados}
	
\section{Gráficos}
	
\section{Análise dos Dados}

	
\section{Conclusão}



\section{Decisões}

Tamanho máximo de um pacote UDP é 1492 bytes (Li essa informação em um site tem que confirmar)

Devemos escolher as entradas do usuario, no enunciado da especificaçao:
\\"Assuma um transmissor e  receptor com buffers de B bits.  Assuma que o objeto a ser transmitido  seja de O bits e que o canal  tenha capacidade de R bits e RTT de t ms. \\Assuma que erros podem ocorrer a uma taxa de 1, 5, 10, 20, 40, 80\%. "

\\Devemos escolher se enviaremos um arquivo de verdade, ou se alocaremos e enviaremos bytes "Falsos"

\\Lógico que deveremos entrar com o N tamanho da janela.
\\Possíveis entradas seriam: 
\\tamanho do buffer, o qual seria igual tanto para o destinatario quanto para o rementente
\\caso escolhemos enviar um arquivo de verdade, devemos informar o nome do arquivo.

\\ Uma biblioteca interessante para tratarmos as entradas do usuário é a arp.h porém eu n tenho ela instalado no meu notebook.
\\Tem um exemplo no meu trabalho do ping UDP.

\\O trabalho que eu fiz com o jedi ta cum um probleminha em relaçao ao primeiro ping entao é melhor utilizar o que o alex me envio.

\\A capacidade R bits do canal vai ser dificil de determinar, nao será informado pelo usuário.
\\O RTT vai ser calculado para cada ACk recebido.

\\Deveremos implementar uma fila para a janela deslizante.

\\O Udp implementa um checksum? 

\\Caso sobre tempo implementamos o checksum do jedi:
\\http://en.wikipedia.org/wiki/Adler-32

\section{Cuidados}

Linguagem: Os programa devem ser feito na linguagem C, padrão ANSI (gcc –ansi -Wall pgma.c). 

Um Readme.txt deve ser entregue juntamente com o programa fonte descrevendo a tarefa que foi 
implementada, nome dos componentes do grupo, matrícula,  a forma de compilar, executar, e testar o 
programa, bem como a saída esperada, mensagens,.. enfim, tudo que for necessário para entender, 
compilar, executar e testar o programa. Lembrado que o monitor irá testar o seu programa primeiro de 
acordo com o seu exemplo, e depois com um teste específico. Portanto, certifique-se que o mesmo 
funciona conforme descrito no seu arquivo Readme.txt.

No nosso caso o readme é este pdf. 

\section{Pseudo Código do Wikipedia}

N  = windowsize
\\Rn = request number
\\Sn = sequence number
\\Sb = sequence base
\\Sm = sequence max

\\Receiver:

\\Rn = 0

\\Do the following forever:

\\If the packet received = Rn && the packet is error free
\\	Accept the packet and send it to a higher layer
\\	Rn = Rn +1
\\	Send a Request for Rn
\\Else
\\	Refuse packet
\\	Send a Request for Rn	

\\Sender:

\\Sb = 0
\\Sm = N – 1

\\Repeat the following steps forever:

\\1. If you receive a request number where Rn > Sb 
\\	Sm = Sm + (Rn – Sb)
\\	Sb =Rn

\\2.  If no packet is in transmission, 
\\	Transmit a packet where Sb <= Sn <= Sm.  
\\	Packets are transmitted in order.

\section{Bibliografia}
\\	KUROSE, F.J. and ROSS W.K , Redes de computadores e a Internet. Addison Wesley, 2003.\\
\\	http://en.wikipedia.org/wiki/Go-Back-N\_ARQ
\\	http://www.jmartinho.net/sd/
 	
\end{document}
